package com.haojin.java;

/**
 * @author .29.
 * @create 2022-04-05 11:33
 */
/*
注解的使用

一、注解的理解：
1.从jdk5.0开始，java增加了对元数据的支持，也就是Annotation（注解）
2.Annotation其实是代码里的特殊标记，这些标记在编译，类加载，运行时被读取，并执行相应处理
  通过使用Annotation，可以在不改变原有逻辑的情况下，在源文件中想入一些补充信息
3.在JavaSE中，注解的使用目的比较简单，例如标记过时的功能，忽略警告等。在JavaEE/Android中
  注解占据了更重要的角色，例如用来配置应用程序的任何切面，代替JavaEE旧版中所遗留的繁冗代码和XML配置等

二、Annotation的使用实例
示例一：生成文档线管注解
示例二：在编译时进行格式检查（JDK内置的三个基本注解）
        @Override:限定重写父类方法，该注解只能用于方法
        @Deprecated：用于表示所修饰的元素（类、方法等）已过时。
        @SuppressWarnings：抑制编译器警告
示例三：跟踪代码依赖性，实现替代配置文件功能


三、如何自定义注解：参照@SuppressWarnings定义
1.注解声明为：@interface
2.内部定义成员，通常使用value表示
3.可以指定成员的默认值，使用default定义
4.如果自定义注解没有成员，表明是一个标识作用

如果注解有成员，在使用注解时，需要指明成员的值
自定义注释必须配上注解的信息处理流程（使用反射）才有意义

四、jdk提供的4种元注解
元注解：对现有的注解进行解释说明的注解
Retention:指定所修饰的Annotation的生命周期：SOURCE/CLASS(默认行为)/RUNTIME
    只有声明为RUNTIME生命周期的注解，才能通过反射获取。
Target:用于指定被修饰的Annotation能用于修饰哪些程序元素
********以下出现频率较低***********
Documented：用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档
            默认情况下，javadoc是不包含注解的（即表示在被javadoc解析时，注解保留）
Inherited：被它修饰的Annotation将具有继承性，某个类被其注解，其子类也拥有此注解

五、通过反射获取注解信息

六、jdk 8 种注解的新特性：可重复注解、类型注解
6.1 可重复注解：①在自定义的注解上声明@Repeatable，成员值为 自定义注解名.class
               ②Target和Retention等元注解和自定义注解相同

6.2 类型注解：
ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中（如：泛型声明）
ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中

 */
public class AnnotationTest {
}
class Person{
    @MyAnnotation(value = "hello")
    int name;
}
